package someTestExcemple.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyUtil {
    public static Star createProxy(BigStar bigStar)
    {
/*        Object newProxyInstance(ClassLoader loader,
            Class<?>[] interfaces,
            InvocationHandler h)*/
        //参数1-指定一个类加载器 参数2-指定生成的代理有哪些接口
        //参数3-指定代理对象需要实现的接口
        Star starProxy =(Star) Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(), new Class[]{Star.class},
                new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                //代理对象要做的事情
                if(method.getName().equals("sing")) {
                    System.out.println("准备话筒-收钱20W~");
                    return method.invoke(bigStar,args);
                }
                else if(method.getName().equals("dance")){
                    System.out.println("准备场地-收钱80W~");
                    return method.invoke(bigStar,args);
                } else {
                    return method.invoke(bigStar,args);
                }
            }
        });
        return starProxy;
    }

}
